package com.ruoyi.web.controller.mall;

import com.ruoyi.system.mc.annotations.McLogAn;
import com.ruoyi.system.mc.entity.McProduct;
import com.ruoyi.system.mc.entity.McProductDetailed;
import com.ruoyi.system.mc.entity.R;
import com.ruoyi.system.mc.service.McProductDetailedService;
import com.ruoyi.system.mc.service.McProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;

/*
 *  @author 雨安
 *  类名： ProductController
 *  创建时间：2024/5/25 商品详情何商品表
 */
@RestController//返回数据 json + 字符串
@CrossOrigin//跨域请求处理
@RequestMapping("/mc/product/api")//访问前缀名
@Slf4j//日志
public class ProductController {

    //商品表Service层
    @Resource
    private McProductService mcProductService;

    //商品详情表
    @Resource
    private McProductDetailedService mcProductDetailedService;


    /**
     * 首页商品展示数据
     * @param mcProduct 商品查询条件对象
     * @return 返回查询结果集合
     */
    @PostMapping("/selectProductOrderByCollect")
    @McLogAn(logContent = "查询首页展示数据",businessType = "查询",requestMethod = "POST")
    public R<McProduct> selectProductListOrderByCollect(McProduct mcProduct){
        //返回结果数据
        return mcProductService.selectAllProductByCollectCount(mcProduct);
    }


    /**
     * 查询商品数据展示信息
     * @param mcProduct 查询条件对象数据
     * @return 返回数据集合 + 总行数 + 响应编码 + 提示信息
     */
    @PostMapping("/getProductList")
    @McLogAn(logContent = "查询商品表基础数据",businessType = "查询",requestMethod = "POST")
    public R<McProduct> getProductList(McProduct mcProduct){
        //调用Service层查询方法
        return mcProductService.getProductList(mcProduct);
    }

    @PutMapping("/delete/productById/{productId}")
    @McLogAn(logContent = "通过主键删除商品表",businessType = "删除",requestMethod = "PUT")
    public String deleteProductById(@PathVariable("productId") Long productId){
        //调用Service方法
        return mcProductService.deleteProductById(productId);
    }

    /**
     * 查询商品详情数据
     * @param mcProductDetailed 商品详情查询条件对象 + 分页参数
     * @return 返回查询结果
     */
    @PostMapping("/getProductDetailed")
    @McLogAn(logContent = "查询商品详情表数据",businessType = "查询",requestMethod = "POST")
    public R<McProductDetailed> getProductDetailed(McProductDetailed mcProductDetailed){
        //调用Service层方法查询
        return mcProductDetailedService.getProductDetailed(mcProductDetailed);
    }

    /**
     * 修改方法
     * @param mcProduct 修改对象
     * @return 返回操作结果
     */
    @PutMapping("/update/productById")
    @McLogAn(logContent = "通过ID修改商品数据",businessType = "修改",requestMethod = "PUT")
    public String UpdateProductById(McProduct mcProduct){
        //调用Service层修改方法
        return mcProductService.updateProductById(mcProduct);
    }

    /**
     * 商品详情删除方法
     * @param productDetailId 商品详情主键ID
     * @return 删除结果字符串
     * */
    @PutMapping("/delete/product/detailById/{ProductDetailId}")
    @McLogAn(logContent = "通过ID删除商品详情数据",businessType = "删除",requestMethod = "PUT")
    public String deleteProductDetailById(@PathVariable(value = "ProductDetailId")Long productDetailId){
        //调用Service层
        return mcProductDetailedService.deleteProductDetailById(productDetailId);
    }

    /**
     * 商品详情修改方法
     * @param mcProductDetailed 修改数据对象
     * @return 返回修改结果字符串
     */
    @PutMapping("/update/product/detailById")
    @McLogAn(logContent = "通过ID修改商品详情数据",businessType = "修改",requestMethod = "PUT")
    public String updateProductDetailById(McProductDetailed mcProductDetailed){
        //调用Service层
        return mcProductDetailedService.updateProductDetailById(mcProductDetailed);
    }


    /**
     * 新增商品基础信息
     * @param mcProduct 新增数据
     * @return 返回操作结果字符串
     */
    @PostMapping("/add/product")
    @McLogAn(logContent = "新增商品信息",businessType = "新增",requestMethod = "POST")
    public String insertProduct(McProduct mcProduct){
        //调用Service层
        return mcProductService.insetProduct(mcProduct);
    }


    /**
     * 商品详情添加语句
     * @param mcProductDetailed 添加对象
     * @return 返回添加结果字符串
     */
    @PostMapping("/add/product/detail")
    @McLogAn(logContent = "新增商品详情信息",businessType = "新增",requestMethod = "POST")
    public String insertProductDetail(McProductDetailed mcProductDetailed){
        //调用Service层
        return mcProductDetailedService.insertProductDetail(mcProductDetailed);
    }



}
